package com.njtech.pet.dao;

import com.njtech.pet.entity.Message;
import com.njtech.pet.entity.User;
import com.njtech.pet.vo.MessageShow;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author lxj
 *         Date 2020-03-10 10:23
 *         Description 聊天记录
 */
public interface MessageDao {

    /**
     * 插入一条记录
     * @param message 新纪录
     * @return 修改行数
     */
    int insert(Message message);

    /**
     * 修改一条记录的state状态
     * @param message 新纪录，封装了id和新状态
     * @return 修改行数
     */
    int updateMessageStateByMessageId(Message message);

    /**
     * 根据一对用户（2人）和起止日期查找聊天记录, sender和receiver是等价的参数
     * @param sender 发送消息的用户
     * @param receiver 接受消息的用户
     * @param beginDate 起日期，可NULL，日期格式 "yyyy-MM-dd HH:mm:ss"
     * @param endDate 止日期，可NULL，日期格式 "yyyy-MM-dd HH:mm:ss"
     * @return 记录集合
     */
    List<Message> selectByCoupleUsersBetweenDates(@Param("sender")User sender,@Param("receiver")User receiver, @Param("beginDate") String beginDate, @Param("endDate") String endDate);

    //*********************比selectByCoupleUsersBetweenDates多了type和state(list)的搜索依据
    /**
     * 根据一对用户（2人）和起止日期查找聊天记录, sender和receiver是等价的参数
     * @param sender 发送消息的用户
     * @param receiver 接受消息的用户
     * @param beginDate 起日期，可NULL，日期格式 "yyyy-MM-dd HH:mm:ss"
     * @param endDate 止日期，可NULL，日期格式 "yyyy-MM-dd HH:mm:ss"
     * @param type 类型
     * @param states 状态集合
     * @return 记录集合
     */
    List<Message> selectByCoupleUsersAndTypeAndStatesBetweenDates(@Param("sender")User sender, @Param("receiver")User receiver, @Param("type") String type, @Param("states") List<String> states, @Param("beginDate") String beginDate, @Param("endDate") String endDate);

    //********************获取用户在进入聊天界面时的消息概要

    /**
     * 获取 用户B作为登录用户 与每个其他用户 的最后一条交流记录 + 与对应消息方的未读消息个数 的列表，未读消息个数不包括自己发送了但对方没有读到的消息
     * @param client 接受用户
     * @param unreadState 此处应置未读状态
     * @return 结果列表
     */
    List<MessageShow> selectReceiverMessageShow(@Param("client") User client, @Param("unreadState") String unreadState);
}
